package com.hspedu.singleTon;
//单例模式-懒汉式
public class SingleTon02 {
    public static void main(String[] args) {
        System.out.println(Cat.n2);//单独调用静态属性的时候不会默认创建对象
        Cat instance = Cat.getInstance();
        Cat instance1 = Cat.getInstance();
        System.out.println(instance);
        System.out.println(instance1);
        System.out.println(instance == instance1);//是否是同一个对象

    }
}

/**
 * 懒汉式步骤：
 * 1.定义构造器私有化
 * 2.定义一个static静态属性对象
 * 3.提供一个public的static方法，当用户首次调用该方法时，才会返回一个新建的Cat对象，
 *   之后再进行调用的时候，返回首次创建的对象
 *
 * 懒汉式的缺点：线程安全问题
 * 假如当三个线程同时到了getInstance()方法这里，
 * 同时进行if判断，这时instance对象是为null的，可能会同时创建三个对象
 */
class Cat{
    private String name;

    public static int n2 = 100;

    private Cat(String name) {
        System.out.println("构造器被调用");
        this.name = name;
    }

    private static Cat instance;

    public static Cat getInstance(){
        if (instance == null){
            instance = new Cat("小喵");
        }
        return instance;
    }
}